package cn.uai.activiti8.approval.bus;

import org.activiti.engine.runtime.ProcessInstance;

import java.util.Map;

/**
 * @desc 业务总线
 * @author uai
 * @since 2025/8/7 10:32
 * @version 1.0
 */
public interface BusinessBus {

    /**
     * 启动流程实例
     * @param body 启动流程实例时请求体
     * @return
     */
    ProcessInstance start(String body);

    /**
     * 启动流程实例
     * @param processDefinitionId 流程定义id
     * @param variables 变量集合
     * @return
     */
    ProcessInstance start(String processDefinitionId, Map<String, Object> variables);

    /**
     * 启动流程实例，会以 processDefinitionKey 最新部署的版本启动流程实例
     * @param processDefinitionKey 流程定义key
     * @param variables 变量集合
     * @return
     */
    ProcessInstance startByKey(String processDefinitionKey, Map<String, Object> variables);

    /**
     * 启动流程实例，会以 processDefinitionKey 最新部署的版本启动流程实例
     * @param processDefinitionKey 流程定义key
     * @param businessKey 流程定义
     * @param variables 变量集合
     * @return
     */
    ProcessInstance startByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);

    /**
     * 完成审批
     * @param body 完成审批时的请求体
     * @return
     */
    String complete(String body);

    /**
     * 完成委派审批任务
     * @param body 完成委派审批时的请求体
     * @return
     */
    String completeDelegation(String body);

    /**
     * 签收任务
     * @param body 签收任务时的请求体
     * @return
     */
    String claim(String body);

    /**
     * 转办任务
     * @param body 转办任务时的请求体
     * @return
     */
    String assign(String body);

    /**
     * 委派
     * @param body 委派时的请求体
     * @return
     */
    String delegate(String body);

    /**
     * 驳回
     * @param body 驳回时的请求体
     * @return
     */
    String reject(String body);

    /**
     * 驳回至申请节点
     * @param body 驳回至申请节点时的请求体
     * @return
     */
    String reject2Apply(String body);

    /**
     * 驳回至任意节点
     * @param body 驳回至任意节点时的请求体
     * @return
     */
    String reject2Any(String body);

    /**
     * 待办任务查询
     * @param uid 用户id
     * @return 待办任务列表
     */
    String taskQuery(Long uid);

    /**
     * 待办任务查询
     * @param userName 用户名
     * @return 待办任务列表
     */
    String taskQuery(String userName);

    /**
     * 候选人任务查询
     * @param userName 用户名
     * @return
     */
    String candidateUserTaskQuery(String userName);

    /**
     * 候选组任务查询
     * @param groupName 组名
     * @return
     */
    String candidateGroupTaskQuery(String groupName);

    /**
     * 挂起流程实例
     * @param body 挂起流程实例时的请求体
     * @return
     */
    String suspend(String body);

    /**
     * 激活流程实例
     * @param body 激活流程实例时的请求体
     * @return
     */
    String activate(String body);
}
